home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 October / Chip Ekim 2003.iso / prog / web / xtreeme / setup.exe / {app} / Scripts / menu_ie4.js < prev    next >
Encoding:
Text File  |  2003-06-06  |  14.8 KB  |  558 lines

  1. // script generated by Xtreeme SiteXpert
  2. // sitemap and search engine creator
  3. // http://www.xtreeme.com/sitexpert
  4. // Copyright(C) 2001-2002 Xtreeme GmbH
  5.  
  6. #define makeTransparent f01
  7. #define showDelayed f02
  8. #define createMenuItem f03
  9. #define setRealWidth f04
  10. #define createPopupFromCode f05
  11. #define closePopup f06
  12. #define absToRel f07
  13. #define openPopup f08
  14. #define setPopupHeight f09
  15. #define scrollPopup f10
  16. #define isChildOfActivePopup f13
  17. #define onPopupOver f14
  18. #define onPopupOut f15
  19. #define getBrowserRect f17
  20. #define calcClientRect f18
  21. #define getClientRect f19
  22. #define onItemClick f20
  23. #define onNextScroll f21
  24. #define onItemOver f22
  25. #define onItemOut f23
  26. #define expandMenu exM
  27. #define collapseMenu coM
  28. #define onDocClick f28
  29. #define initializeMenu f29
  30. #define addNewEvent f30
  31. #define initializeAll f31
  32. #define errorTrap f32
  33. #define getAbsolutePath f33
  34. #define removeHighlight f34
  35.  
  36. #define popupRightPad v01
  37. #define curPopupWidth v02
  38. #define expandArrowSrc v03
  39. #define ownerMenu v04
  40. #define highlightColor v05
  41. #define normalColor v06
  42. #define highlightBgColor v07
  43. #define normalBgColor v08
  44. #define levelAttribs v09
  45. #define popupOpenHeight v10
  46. #define bBitmapPopups v11
  47. #define arrayName v12
  48. #define arrayItem v13
  49. #define expandedWnd v14
  50. #define popupRect v15
  51. #define browserRect v16
  52. #define activePopup v17
  53. #define popupFrame v18
  54. #define sepFrame v19
  55. #define openSameFrame v20
  56. #define imgFolder v21
  57. #define popAlign v22
  58. #define popupWidth v23
  59. #define contentFrame v24
  60. #define bBitmapScheme v25
  61. #define itemText v26
  62. #define itemLink v27
  63. #define bottomImgHeight v28
  64. #define scrollTimeout v29
  65. #define popupArray v30
  66. #define popupHeight v31
  67. #define nmenu q
  68.  
  69. function getAbsolutePath(p)
  70. {
  71.     if(p&&p.indexOf(':/')==-1&&p.indexOf(':\\')==-1&&p.indexOf('/')!=0) return unescape(absPath)+p;
  72.     else return p;
  73.  
  74. }
  75.  
  76. function addLoadHandler(lh)
  77. {
  78.     if (!document.loadHandlers)
  79.     {
  80.         document.loadHandlers=new Array();
  81.         document.loadHandlers[0]=lh;
  82.         document.lastLoadHandler=0;
  83.     }
  84.     else
  85.     {
  86.         document.lastLoadHandler++;
  87.         document.loadHandlers[document.lastLoadHandler]=lh;
  88.     }
  89. }
  90. addLoadHandler ('initializeMenu');
  91. window.onload=initializeAll;
  92. function errorTrap(){return true;}
  93. window.onerror=errorTrap;
  94.  
  95. function createMenuItem(nmenu,popup,id,itemLink,itemText,popupArray,levelAttribs,bLast,popupHeight,parent)
  96. {
  97.     var itemType=0;
  98.     var itemWnd=createElementEx(nmenu.popupFrame.document,popup,"span","id",id,null,null,"width",nmenu.popupWidth-2*nmenu.bord,null,null);
  99.     itemWnd.innerHTML=itemText;
  100.     addNewEvent(itemWnd,"mouseover",onItemOver,false);
  101.     addNewEvent(itemWnd,"mouseout",onItemOut,false);
  102.     addNewEvent(itemWnd,"mousedown",onItemClick,false);
  103.     addNewEvent(itemWnd,"dblclick",onItemClick,false);
  104.     itemWnd.owner=popup;
  105.     with (itemWnd.style)
  106.     {
  107.         if(itemType==2)top=popupHeight-nmenu.scrollHeight;
  108.         else top=popupHeight;
  109.         if(itemLink){cursor=(!IE4||version>=6)?"pointer":"hand";}
  110.         else{cursor="default";}
  111.         color=levelAttribs [3];
  112.         if (!bLast)
  113.         {
  114.             borderBottomColor=nmenu.borderCol;
  115.             borderBottomWidth=nmenu.sep;
  116.             borderBottomStyle="solid";
  117.         }
  118.         if (!itemType)padding=nmenu.vertSpace;
  119.         paddingLeft=nmenu.popupLeftPad+nmenu.vertSpace;
  120.         paddingRight=(nmenu.popupRightPad<nmenu.iconSize?nmenu.iconSize:nmenu.popupRightPad)+nmenu.vertSpace;
  121.         fontSize=levelAttribs[0];
  122.         fontWeight=(levelAttribs[1])?"bold":"normal";
  123.         fontStyle=(levelAttribs[2])?"italic":"normal";
  124.         fontFamily=levelAttribs[6];
  125.     }
  126.     if (popupArray)itemWnd.popupArray=popupArray;
  127.     itemWnd.url=getAbsolutePath(itemLink);
  128.     itemWnd.dispText=itemText;
  129.     if (popupArray)
  130.     {
  131.         var leftImgPos=nmenu.popupWidth-nmenu.bord-nmenu.iconSize-5;
  132.         var topImgPos=itemWnd.offsetHeight/2-nmenu.iconSize/2+popupHeight-2;
  133.         txt="<div style='width:"+nmenu.iconSize+";height:"+nmenu.iconSize+";position:absolute;left:"+leftImgPos+";top:"+topImgPos+"'>";
  134.         txt+="<img src='";
  135.         txt+=getAbsolutePath(nmenu.imgFolder)+"/"+nmenu.fnm+"ia.gif' border=0 width="+nmenu.iconSize+" height="+nmenu.iconSize+" align=right></span>";
  136.         itemWnd.insertAdjacentHTML("BeforeEnd",txt);
  137.     }
  138.     return itemWnd.offsetHeight;
  139. }
  140.  
  141. function createPopupFromCode(nmenu,arrayName,level)
  142. {
  143.     var popupName=arrayName+"popup";
  144.     var popup=getElementById(nmenu.popupFrame,popupName);
  145.     if (popup)return popup;
  146.     var levelAttribs;
  147.     if (level > nmenu.maxlev) {levelAttribs = eval ("nmenu.lev" + nmenu.maxlev) ;} else {levelAttribs = eval ("nmenu.lev" + level) ;}
  148.     popup=createElementEx(nmenu.popupFrame.document,nmenu.popupFrame.document.body,"DIV","id",popupName,null,null,"position","absolute",null,null);
  149.     popup.level=level;
  150.     popup.highlightColor=levelAttribs[5];
  151.     popup.normalColor=levelAttribs[3];
  152.     popup.highlightBgColor=levelAttribs[7];
  153.     popup.normalBgColor=levelAttribs[4];
  154.     popup.scrVis=false;
  155.     popup.nmenu=nmenu;
  156.     with (popup.style)
  157.     {
  158.         zIndex=maxZ;
  159.         width=nmenu.popupWidth;
  160.         borderColor=nmenu.borderCol;
  161.         backgroundColor=levelAttribs[4];
  162.         borderWidth=nmenu.bord;
  163.         borderStyle="solid";
  164.     }
  165.     addNewEvent(popup,"mouseout",onPopupOut,false);
  166.     addNewEvent(popup,"mouseover",onPopupOver,false);
  167.  
  168.     var popupHeight=0;
  169.  
  170.     popup.style.backgroundColor=levelAttribs[4];
  171.  
  172.     var array=eval(arrayName);
  173.     var arrayItem;
  174.     for(arrayItem=0;arrayItem<array.length/3;arrayItem++)
  175.     {
  176.         var popupArray=(array[arrayItem*3+2])?(arrayName+"_"+parseInt(arrayItem+1)):null;
  177.         popupHeight+=createMenuItem(nmenu,popup,null,array[arrayItem*3+1],array[arrayItem*3],popupArray,levelAttribs,(arrayItem == array.length/3-1),popupHeight,popup);
  178.     }
  179.     popup.style.height=popupHeight+nmenu.bord*2;
  180.     popup.maxHeight=popupHeight+nmenu.bord*2;
  181.     var bottomImgHeight=0;
  182.     return popup;
  183. }
  184.  
  185. function closePopup(nmenu,popupId)
  186. {
  187.     if(popupId.indexOf('_')==-1){var hideWnd=getElementById(nmenu.popupFrame,'HideItem');if(hideWnd)hideWnd.style.display='none';}
  188.     var popup=getElementById(nmenu.popupFrame,popupId);
  189.     if (popup)
  190.     {
  191.         if (popup.expandedWnd) closePopup (nmenu,popup.expandedWnd.id);
  192.         popup.style.display="none";
  193.     }
  194.     if (nmenu.activePopup && nmenu.activePopup.id==popupId) nmenu.activePopup=null;
  195. }
  196.  
  197. function absToRel(rect,refx,refy)
  198. {
  199.     var retval=new rct(rect.left-refx,rect.top-refy,rect.right-refx,rect.bottom-refy);
  200.     return retval;
  201. }
  202.  
  203. function openPopup(nmenu,popup,x,y,bDontMove,refWnd)
  204. {
  205.     if(popup.id.indexOf('_')==-1){var hideWnd=getElementById(nmenu.popupFrame,'HideItem');if(hideWnd)hideWnd.style.display='';}
  206.     popup.style.left=x;
  207.     popup.style.top=y;
  208.     popup.style.display="";
  209.     var popupRect=getClientRect(nmenu,popup);
  210.     var browserRect=getBrowserRect(nmenu.popupFrame);
  211.     var bResize=(popup.offsetHeight<popup.maxHeight);
  212.     if (x+nmenu.popupWidth>browserRect.right)
  213.     {
  214.         if(refWnd&&refWnd.id&&refWnd.id.indexOf('top')==-1)popup.style.left=Math.max(0,refWnd.offsetLeft-nmenu.popupWidth+nmenu.levelOffset);
  215.         else popup.style.left=browserRect.right-popup.offsetWidth-5;
  216.     }
  217. }
  218.  
  219. function isChildOfActivePopup(nmenu,popup)
  220. {
  221.     var wnd=nmenu.activePopup;
  222.     while(wnd)
  223.     {
  224.         if (wnd.id==popup.id)
  225.         {
  226.             return true;
  227.         }
  228.         wnd=wnd.expandedWnd;
  229.     }
  230.     return false;
  231. }
  232.  
  233. function onPopupOver()
  234. {
  235.     var nmenu=this.nmenu;
  236.     if (nmenu.activePopup && isChildOfActivePopup (nmenu,this)) clearTimeout(nmenu.activePopupTimeout);
  237. }
  238.  
  239. function onPopupOut()
  240. {
  241.     var nmenu=this.nmenu;
  242.     onPopupOutImpl(nmenu,this);
  243. }
  244.  
  245. function onPopupOutImpl(nmenu,popup)
  246. {
  247.     if (nmenu.mout && nmenu.activePopup && isChildOfActivePopup (nmenu,popup))
  248.     {
  249.         if (nmenu.activePopupTimeout) clearTimeout (nmenu.activePopupTimeout);
  250.         nmenu.activePopupTimeout=setTimeout("closePopup("+nmenu.name+",'"+nmenu.activePopup.id+"');", nmenu.closeDelay);
  251.     }
  252. }
  253.  
  254. function rct(left,top,right,bottom)
  255. {
  256.     this.left=left;
  257.     this.top=top;
  258.     this.right=right;
  259.     this.bottom=bottom;
  260. }
  261.  
  262. function getBrowserRect(doc)
  263. {
  264.     var left=0;
  265.     var top=0;
  266.     var right;
  267.     var bottom;
  268.     if(doc.pageXOffset)left=doc.pageXOffset;
  269.     else if(doc.document.body.scrollLeft)left=doc.document.body.scrollLeft;
  270.     if(doc.pageYOffset)top=doc.pageYOffset;
  271.     else if(doc.document.body.scrollTop)top=doc.document.body.scrollTop;
  272.     if(doc.innerWidth)right=left+doc.innerWidth;
  273.     else if(doc.document.body.clientWidth)right=left+doc.document.body.clientWidth;
  274.     if(doc.innerHeight)bottom=top+doc.innerHeight;
  275.     else if(doc.document.body.clientHeight)bottom=top+doc.document.body.clientHeight;
  276.     var retval=new rct(left,top,right,bottom);
  277.     return retval;    
  278. }
  279.  
  280. function getClientRect(nmenu,wnd)
  281. {
  282.     var left=mac?document.body.leftMargin:0;
  283.     var top=mac?document.body.topMargin:0;
  284.     var right=0;
  285.     var bottom=0;
  286.     var par=wnd;
  287.     while (par)
  288.     {
  289.         left+=par.offsetLeft;
  290.         top+=par.offsetTop;
  291.         if (par.offsetParent==par || par.offsetParent==nmenu.popupFrame.document.body) break;
  292.         par=par.offsetParent;
  293.     }
  294.     right=left+wnd.offsetWidth;
  295.     bottom=top+wnd.offsetHeight;
  296.     var retval=new rct(left,top,right,bottom);
  297.     return retval;
  298. }
  299.  
  300. function findFr(wn,fr)
  301. {
  302.     if(wn.frames)
  303.     {
  304.         for(var i=0;i<wn.frames.length;i++)
  305.         {
  306.             if(wn.frames[i].name==fr)return wn.frames[i];
  307.             var ret=findFr(wn.frames[i],fr);
  308.             if(ret)return ret;
  309.         }
  310.     }
  311.     return null;
  312. }
  313.  
  314. function onItemClick()
  315. {
  316.     var item=this;
  317.     var nmenu=this.owner.nmenu;
  318.     if (item.url)
  319.     {
  320.         var trgFrame=nmenu.cntFrame;
  321.         var startPos=item.dispText.indexOf('<!--');
  322.         if (startPos!=-1)
  323.         {
  324.             var endPos = item.dispText.indexOf('-->',startPos);
  325.             trgFrame = item.dispText.substring (startPos+4,endPos);
  326.         }
  327.         if(trgFrame)
  328.         {
  329.             if (trgFrame=="_blank") window.open (item.url);
  330.             else if (trgFrame=="_top") window.top.location.href=item.url;
  331.             else if (trgFrame.indexOf('_')==0) parent.location.href=item.url;
  332.             else
  333.             {
  334.                 var fr=findFr(window.top,trgFrame);
  335.                 if(fr)fr.location.href=item.url;
  336.                 else window.location.href=item.url;
  337.             }
  338.         }
  339.         else
  340.         {
  341.             var find=item.url.indexOf("javascript:");
  342.             if (find!=-1)
  343.                 eval(item.url.substring(find));
  344.             else
  345.             {
  346.                 var mt=item.url.indexOf("mailto:");
  347.                 if(mt!=-1)window.top.location=item.url.substring(mt);
  348.                 else nmenu.targetFrame.location=item.url;
  349.             }
  350.         }
  351.         if(nmenu.activePopup)closePopup(nmenu,nmenu.activePopup.id);
  352.     }
  353. }
  354.  
  355. function onItemOver()
  356. {
  357.     var item=this;
  358.     var nmenu=this.owner.nmenu;
  359.     if (item.owner.expandedWnd)
  360.     {
  361.         closePopup(nmenu,item.owner.expandedWnd.id);
  362.     }
  363.     if (item.url&&item.url.indexOf("javascript:")==-1)
  364.         window.status=item.url;
  365.     else
  366.         window.status="";
  367.     item.style.color=item.owner.highlightColor;
  368.     item.style.backgroundColor=item.owner.highlightBgColor;
  369.     var items=getElementsByTagName(item.owner,"SPAN");
  370.     var i=0;
  371.     for (;i<items.length;i++)
  372.     if(item!=items[i]&&(!items[i].id||items[i].id.indexOf("scroll")==-1))
  373.     {
  374.         items[i].style.backgroundColor=item.owner.normalBgColor;
  375.         items[i].style.color=item.owner.normalColor;
  376.     }
  377.     if (item.popupArray)
  378.     {
  379.         var rect=getClientRect(nmenu,item);
  380.         var x=rect.right-nmenu.levelOffset;
  381.         var y=rect.top;
  382.         var popup=createPopupFromCode(nmenu,item.popupArray,item.owner.level+1);
  383.         item.owner.expandedWnd=popup;
  384.         openPopup(nmenu,popup,x,y+2,false,item.owner);
  385.     }
  386. }
  387.  
  388. function onItemOut()
  389. {
  390.     var item=this;
  391.     var nmenu=this.owner.nmenu;
  392.     item.style.color=item.owner.normalColor;
  393.     item.style.backgroundColor=item.owner.normalBgColor;
  394.     window.status="";
  395. }
  396.  
  397. function createElementEx(ownerDocument,parent,tag,a1,av1,a2,av2,s1,sv1,s2,sv2)
  398. {
  399.     var text="<"+tag+" ";
  400.     if(a1)text+=a1+"="+av1+" ";
  401.     if(a2)text+=a2+"="+av2+" ";
  402.     if(s1||s2)
  403.     {
  404.         text+="style='";
  405.         if(s1)text+=s1+":"+sv1+";";
  406.         if(s2)text+=s2+":"+sv2+";";
  407.         text+="' ";
  408.     }
  409.     text+="></"+tag+">";
  410.     parent.insertAdjacentHTML("BeforeEnd",text);
  411.     return(parent.children[parent.children.length-1]);
  412. }
  413.  
  414. function createElement(ownerDocument,parent,tag)
  415. {
  416.     parent.insertAdjacentHTML("BeforeEnd","<"+tag+"/>");
  417.     return(parent.children[parent.children.length-1]);
  418. }
  419.  
  420. function getElementById(wnd,id)
  421. {
  422.     if(id&&wnd)return eval ("wnd."+id);
  423.     else return null;
  424. }
  425.  
  426. function getElementsByTagName(parent,name)
  427. {
  428.     if(parent) return parent.all.tags(name);
  429.     else return null;
  430. }
  431.  
  432. function expandMenu(nmenu,popupId,refWnd,dum,ml,mt,mr,mb)
  433. {
  434.  
  435.     if(!docLoaded)return;
  436.     clearTimeout(nmenu.activePopupTimeout);
  437.     if (nmenu.activePopup&&nmenu.activePopup.id!=popupId+"popup")
  438.         closePopup(nmenu,nmenu.activePopup.id);
  439.     if(popupId=='none')return;
  440.     var rect;
  441.     if(refWnd=='coords'){rect=getClientRect(nmenu,getElementById(window,nmenu.name+"tl"));rect.left=rect.left+ml;rect.top=rect.top+mt;rect.right=rect.left+mr;rect.bottom=rect.top+mb;}else{rect=getClientRect(nmenu,getElementById(window,popupId+"top"));}
  442.     var x;
  443.     var y;
  444.     if(nmenu.menuHorizontal)
  445.     {
  446.         x=rect.left;
  447.         y=rect.bottom+nmenu.popupOffset;
  448.     }
  449.     else
  450.     {
  451.         x=rect.right+nmenu.popupOffset;
  452.         y=rect.top;
  453.     }
  454.     if(nmenu.sepFrame&&!nmenu.openSameFrame)
  455.     {
  456.         var brRect=getBrowserRect(nmenu.popupFrame);
  457.         var wRect=getBrowserRect(window);
  458.         switch (nmenu.menuPos)
  459.         {
  460.         case 0:
  461.             x=brRect.left+nmenu.popupOffset;
  462.             y+=brRect.top-wRect.top;
  463.             break;
  464.         case 1:
  465.             x=brRect.right-nmenu.popupOffset;
  466.             y+=brRect.top-wRect.top;
  467.             break;
  468.         case 2:
  469.             x+=brRect.left-wRect.left;
  470.             y=brRect.top+nmenu.popupOffset;
  471.             break;
  472.         case 3:
  473.             x+=brRect.left-wRect.left;
  474.             y=brRect.bottom-nmenu.popupOffset;
  475.             break;
  476.         }
  477.     }
  478.     var popup=createPopupFromCode(nmenu,popupId,0);
  479.     openPopup(nmenu,popup,x,y,true,null);
  480.     nmenu.activePopup=popup;
  481. }
  482.  
  483. function collapseMenu(nmenu,popupId)
  484. {
  485.     if(!docLoaded)return;
  486.     var popup=getElementById(nmenu.popupFrame,popupId+"popup");
  487.     if(popup)onPopupOutImpl(nmenu,popup);
  488. }
  489.  
  490. function expandMenuNS(nmenu,popupId,e,dItem)
  491. {
  492. }
  493.  
  494. function collapseMenuNS(nmenu,popupId)
  495. {
  496. }
  497.  
  498. function onDocClick()
  499. {
  500.     var nmn;
  501.     for(nmn=1;nmn<=lastm;nmn++)
  502.     {
  503.         var nmenu=eval("window.m"+nmn);
  504.         if(nmenu&&nmenu.activePopup)closePopup(nmenu,nmenu.activePopup.id);
  505.     }
  506. }
  507.  
  508. function initializeMenu()
  509. {
  510.     if(docLoaded)return;
  511.     var nmn;
  512.     for(nmn=1;nmn<=lastm;nmn++)
  513.     {
  514.         var nmenu=eval("window.m"+nmn);
  515.         if(nmenu)
  516.         {
  517.             nmenu.popupFrame=(nmenu.sepFrame&&!nmenu.openSameFrame)?findFr(window.top,nmenu.contentFrame):window;
  518.             nmenu.targetFrame=(nmenu.sepFrame)?findFr(window.top,nmenu.cntFrame):window;
  519.             if(!nmenu.mout)addNewEvent(nmenu.popupFrame.document,"mousedown",onDocClick,false);
  520.         }
  521.     }
  522.     docLoaded=true;
  523. }
  524.  
  525. function addNewEvent(obj,event,fun,bubble)
  526. {
  527.     if (obj.addEventListener)
  528.         obj.addEventListener(event,fun,bubble);
  529.     else
  530.     {
  531.         eval("obj.on"+event+"="+fun);
  532.     }
  533. }
  534.  
  535. function chgBg(nmenu,item,color)
  536. {
  537.     var el=getElementById(window,item);
  538.     if (!IE4)return;
  539.     if (color==0)
  540.     {
  541.         if(!nmenu.bBitmapScheme)el.style.background=nmenu.tlmOrigBg;
  542.         el.style.color=nmenu.tlmOrigCol;
  543.     }
  544.     else
  545.     {
  546.         if(!nmenu.bBitmapScheme&&(color&1))el.style.background=nmenu.tlmHlBg ;
  547.         if(color&2)el.style.color=nmenu.tlmHlCol ;
  548.     }
  549. }
  550.  
  551. function initializeAll()
  552. {
  553.     var i;
  554.     for(i=0;i<=document.lastLoadHandler;i++)
  555.     {
  556.         eval(document.loadHandlers[i]+'();');
  557.     }
  558. }